//给定一个正整数 n，生成一个包含 1 到 n2 所有元素，且元素按顺时针顺序螺旋排列的正方形矩阵。 
//
// 示例: 
//
// 输入: 3
//输出:
//[
// [ 1, 2, 3 ],
// [ 8, 9, 4 ],
// [ 7, 6, 5 ]
//] 
// Related Topics 数组 
// 👍 269 👎 0

package leetcode.editor.cn;

import common.util.MyUtil;

/**
 * Java：螺旋矩阵 II
 *
 * @author changgui
 */
@SuppressWarnings("all")
public class P59_SpiralMatrixIi {
    public static void main(String[] args) {
        Solution solution = new P59_SpiralMatrixIi().new Solution();
        // TODO 此处开始你的表演
        MyUtil.printInt(solution.generateMatrix(2));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int[][] generateMatrix(int n) {
            if (n <= 0) {
                return null;
            }
            int curr = 1;
            int[][] matrix = new int[n][n];
            for (int i = 0; i < (matrix.length + 1) / 2; i++) {
                // 右边界纵坐标
                int ry = matrix[i].length - i - 1;
                // 下边界横坐标
                int dx = matrix.length - i - 1;
                // 左边界纵坐标
                int ly = i;
                // 上边界横坐标
                int tx = i + 1;

                // 左 -> 右
                for (int j = i; j <= ry; j++) {
                    matrix[i][j] = curr++;
                }
                // 上 -> 下
                for (int j = i + 1; j <= dx; j++) {
                    matrix[j][ry] = curr++;
                }
                // 右 -> 左
                for (int j = ry - 1; j >= ly; j--) {
                    matrix[dx][j] = curr++;
                }
                // 下 -> 上
                for (int j = dx - 1; j >= tx; j--) {
                    matrix[j][ly] = curr++;
                }
            }
            return matrix;
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)
}